#include<iostream>
using namespace std;
struct persona
{
    string nombre;
    int edad;
};
int pedirOpcion ();
void cargarPersona (struct persona vec[], int &cant);
void mostrarPersona (struct persona vec[], int cant);
int buscarPersona (struct persona vec[], int cant, string nombre, int &Nnombre);
void modificarPersona (struct persona vec[], int cant, int contador);
int promedioEdad (struct persona vec[], int cant);
void personaVieja (struct persona vec[], int cant);
void personaJoven(struct persona vec[], int cant);
int main ()
{
    int promedio;
    int opcion;
    int falso;
    int contador;
    int cant = 0;
    int Nnombre;
    string nombre;
    struct persona vecP[50];
    cout<<"Bienvenido"<<endl<<endl;
    opcion = pedirOpcion();
    cout<<endl;
    while (opcion != 10)
    {
        switch (opcion)
        {
            case 1 :
                    cargarPersona (vecP, cant);
                    break;
            case 2 :
                    mostrarPersona (vecP,cant);
                    break;
            case 3 :
                    cout<<"Ingrese el nombre que desea buscar: ";
                    cin>>nombre;
                    contador = buscarPersona (vecP,cant,nombre,Nnombre);
                    if (Nnombre== 1)
                        cout<<"Nombre: "<<vecP[contador].nombre<<endl<<"Edad: "<<vecP[contador].edad<<endl;
                    if (Nnombre > 1)
                        cout<<"Error"<<endl<<"Nombre repetido"<<endl<<endl;
                    if (Nnombre < 1)
                        cout<<"Nombre no encontrado"<<endl<<endl;
                    break;
            case 4 :
                    cout<<"Ingrese el nombre que desea modificar: ";
                    cin>>nombre;
                    contador = buscarPersona (vecP,cant,nombre,Nnombre);
                    if (Nnombre < 1)
                        cout<<"Nombre no encontrado"<<endl<<endl;
                    if (Nnombre== 1)
                        modificarPersona (vecP,cant,contador);
                        cout<<"Nombre: "<<vecP[contador].nombre<<endl<<"Edad: "<<vecP[contador].edad<<endl;
                    if (Nnombre > 1)
                        cout<<"Error"<<endl<<"Nombre repetido"<<endl<<endl;
                    break;
            case 5 :
                    if (cant != 0)
                    {
                         promedio = promedioEdad (vecP , cant);
                         cout<<"El promedio de las edades es: "<<promedio<<endl<<endl;
                    }
                    else
                         cout<<"Por favor ingrese al menos una persona"<<endl<<endl;
                    break;
            case 6 :
                    personaVieja(vecP , cant);
                    break;
            case 7:
                    personaJoven(vecP, cant);
                    break;
        }
        opcion = pedirOpcion();
        cout<<endl;
    }
    return 1;
}
int pedirOpcion ()
{
    int opcion, flag;
    flag = 0;
    cout<<"Menu:"<<endl<<endl<<"1_Agregar persona"<<endl<<"2_Mostrar persona"<<endl<<"3_Buscar Persona"<<endl;
    cout<<"4_Modificar persona"<<endl<<"5_Promedio de edad de personas"<<endl<<"6_Persona mas vieja"<<endl;
    cout<<"7_Persona mas joven"<<endl<<"8_Ordenar por edad"<<endl<<"9_Ordenar por nombre"<<endl<<"10_Salir"<<endl<<endl;
    while (flag == 0)
    {
        cout<<"Ingrese una opcion: ";
        cin>>opcion;
        if (opcion<11 && opcion>0)
            flag = 1;
        else
            cout<<"Error"<<endl<<"Ingrese otro numero";
    }
    return opcion;
}
void cargarPersona (struct persona vec[], int &cant)
{
    if (cant<50)
    {
        cout<<"Ingrese una persona (maximo 50)"<<endl<<"Nombre: ";
        cin>>vec[cant].nombre;
        cout<<"Edad: ";
        cin>>vec[cant].edad;
        cant++;
    }
    else
    {
        cout<<"Error"<<endl<<"Limite de personas excedido";
    }
    cout<<endl;
    return;
}
void mostrarPersona (struct persona vec[],int cant)
{
    int i = 0;
    while (i<cant)
    {
        cout<<"Nombre: "<<vec[i].nombre<<endl;
        cout<<"Edad: "<<vec[i].edad<<endl<<endl;
        i++;
    }
    return;
}
int buscarPersona (struct persona vec[], int cant, string nombre, int &Nnombre)
{
    int i,contador;
    i=0;
    Nnombre = 0;
    while (i<cant)
    {
         if (vec[i].nombre == nombre)
         {
             contador=i;
             Nnombre++;
         }
         i++;
    }
    return contador;
}
void modificarPersona (struct persona vec[], int cant,int contador)
{
    cout<<"Ingrese la edad: ";
    cin>>vec[contador].edad;
    return;
}
int promedioEdad (struct persona vec[], int cant)
{
    int i = 0;
    int promedio;
    int suma = 0;
    while (i<cant)
    {
        suma = suma + vec[i].edad;
        i++;
    }
    promedio = suma /(cant);
    return promedio;
}
void personaVieja (struct persona vec[], int cant)
{
    int i,viejo,i2;
    int contador;
    i=0;
    viejo = vec[i].edad;
    i2= i;
    contador=0;
    while (i<cant)
    {
        i++;
        if (vec[i].edad > viejo)
        {
            i2 = i;
            contador=0;
        }
        if (vec[i].edad == viejo)
        {
            contador++;
        }
    }
    if (contador == 0)
        cout<<"La persona mas vieja es "<<vec[i2].nombre<<endl<<endl;
    else
        cout<<"Hay dos personas con la maxima edad"<<endl<<endl;
}
void personaJoven (struct persona vec[], int cant)
{
    int i,joven,i2;
    i=0;
    int contador = 0;
    joven = vec[i].edad;
    i2= i;
    while (i<cant)
    {
        i++;
        if (vec[i].edad < joven)
        {
            i2 = i;
            contador=0;
        }
        if (vec[i].edad == joven)
        {
            contador++;
        }
    }
    if (contador == 0)
        cout<<"La persona mas joven es "<<vec[i2].nombre;
    else
        cout<<"Hay dos personas con la edad minima";
}
